﻿<%@ Page Title="" Language="C#" MasterPageFile="~/Master/Site.master" AutoEventWireup="true" CodeFile="Frm_FibraOptica.aspx.cs" Inherits="Views_Predeterminados_Frm_FibraOptica" %>

<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" Runat="Server">
    <div id="pn_inputs" class="well">
    <div id="contenido" class="row-fluid">
        <div class="span6">
            <fieldset>
                <div class="form-horizontal">
                    <div class="control-group">
                        <label class="control-label" for="txtLongituEnlace">Longitud de Enlace (km)</label>
                        <div class="controls">
                            <input type="text" id="txtLongituEnlace" placeholder="longitu de enlace" name="Longitud de Enlace"  validationMessage="Longitud de Enlace es requerido!" required/>
                        </div>
                    </div>	
                    <div class="control-group">
                        <label class="control-label" for="txtLongituCarrete">Longitud de Carrete (km)</label>
                        <div class="controls">
                            <input type="text" id="txtLongituCarrete" placeholder="longitu de Carrete" name="Longitud de Carrete" validationMessage="Longitud de Carrete es requerido!" required />
                        </div>
                    </div>	
                </div>
            </fieldset> 
        </div>
        <div class="span6">
            <fieldset>
                <div class="form-horizontal">
                    <div class="control-group">
                        <label class="control-label" for="txtNumHilos">Numero de hilos</label>
                        <div class="controls">
                            <%--<select id="cboNumHilos"  >
                                <option value>Seleccione...</option>
                                <option value="12">12</option>
                                <option value="48">48</option>
                                <option value="96">96</option>
                            </select>--%>
                            <input id="txtNumHilos" type="number" value="" min="1" max="100000" step="1" name="# de Hilos" validationMessage="Numero de hilos es requerido!" required/>
                        </div>
                    </div>
                    <div class="control-group">
                        <label class="control-label" for="cboTipoInstalacion">Tipo de Instalación</label>
                        <div class="controls">
                            <select id="cboTipoInstalacion" class="span7"></select>
                        </div>
                    </div>
                    <div id="pn_porcentaje" style="display:none">
                    <div class="control-group">
                        <label class="control-label" for="txtPistaConcreto">Pista Concreto (%)</label>
                        <div class="controls">
                            <input id="txtPistaConcreto" class="span3" type="number" value="" min="1" max="100000" step="1" name="Pista Concreto" validationMessage="Pista Concreto es requerido!"/>
                        </div>
                    </div>
                    <div class="control-group">
                        <label class="control-label" for="txtPistaTierra">Pista Tierra (%)</label>
                        <div class="controls">
                            <input id="txtPistaTierra" class="span3" type="number" value="" min="1" max="100000" step="1" name="Pista Tierra" validationMessage="Pista Tierra es requerido!"/>
                        </div>
                    </div>
                    </div>
                        
                </div>

            </fieldset> 
        </div>
        
        </div>	
        <div class="center">
            <button id="btnCalcular" class="btn">Calcular</button>
        </div>
    </div>
    <div id="gridFibraOptica"></div>
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="ScriptContent" Runat="Server">
    <script type="text/javascript">
        $(document).ready(function () {

            $("#txtNumHilos").kendoNumericTextBox({
                format: "#"
            });
            $("#txtPistaConcreto").kendoNumericTextBox({
                format: "#",
                change: onChange1,
                spin: onChange1
            });
            $("#txtPistaTierra").kendoNumericTextBox({
                format: "#",
                change: onChange2,
                spin: onChange2
            });
            CargarCombos();
            $("#cboTipoInstalacion").on("change", function () {
                if ($(this).val() == "90") {
                    $("#pn_porcentaje").show();
                    $("#txtPistaConcreto").attr("required", "required");
                    $("#txtPistaTierra").attr("required", "required");
                } else {
                    $("#txtPistaConcreto").removeAttr("required");
                    $("#txtPistaTierra").removeAttr("required");
                    $("#pn_porcentaje").hide();
                }
            });

            $("#btnCalcular").on("click", function () {
                var validator = $("#pn_inputs").kendoValidator().data("kendoValidator");
                if (validator.validate()) {
                    loadFibraOptica();
                }
                return false;
            });
        });

        function onChange1() {
            $("#txtPistaTierra").data("kendoNumericTextBox").value(100 - this.value());
            }
            function onChange2() {
                $("#txtPistaConcreto").data("kendoNumericTextBox").value(100 - this.value());
            }
        function loadFibraOptica(e) {
            var listaIds = calcularIds();
            var grid = $("#gridFibraOptica").kendoGrid({
                dataSource: {
                    type: "json",
                    transport: {
                        read: {
                            type: "POST",
                            url: "Frm_FibraOptica.aspx/ObtenerItemsPorIds",
                            contentType: "application/json; charset=utf-8",
                            dataType: "json"
                        },
                        create: {
                            type: "POST",
                            url: function (options) {
                                return "";
                            },
                            contentType: "application/json; charset=utf-8",
                            dataType: "json"
                        },
                        parameterMap: function (options, operation) {
                            if (operation == "read") {
                                return kendo.stringify({ idsItems: listaIds });
                            }
                            if (operation == "create") {
                                var datos = $("#gridFibraOptica").data("kendoGrid");
                                var itemDS = datos.dataSource.getByUid(options.uiId);
                                itemDS.PrecioTotalMinimo = itemDS.Cantidad * itemDS.PrecioUnitarioMinimo;
                                itemDS.PrecioTotalMaximo = itemDS.Cantidad * itemDS.PrecioUnitarioMaximo;
                                itemDS.P07ClaseDesc = "Otros";
                                datos.dataSource.fetch();

                            }
                        }
                    },
                    schema: {
                        data: function (response) {
                            if (response.d.length > 0) {
                                var rpta = response.d;
                                var flag = true;
                                for (var i = 0; i < rpta.length; i++) {
                                    if (rpta[i].IdComponente == 0) {
                                        flag = false;
                                        rpta[i].P07ClaseDesc = "Fibra";
                                        rpta[i].IdComponente = i+1;
                                        //break;
                                    }
                                }
                                switch ($("#cboTipoInstalacion").val()) {
                                    case "88":
                                        if (flag) {
                                            rpta = calcularAereaPostes(rpta);
                                            break;
                                        }
                                    case "89":
                                        rpta = calcularAereaMediaTension(rpta);
                                        break;
                                    case "90":
                                        rpta = calcularCanalizada(rpta);
                                        break;
                                }
                                return rpta;
                            }
                        },
                        model: {
                            id: "IdComponente",
                            fields: {
                                IdComponente: { type: "number", editable: false },
                                Descripcion: { type: "string", validation: { required: { message: "Ingrese Descrición"}} },
                                Cantidad: { type: "number", validation: { required: { message: "Ingrese Cantidad" }, min: 1, max: 10000} },
                                Orden: { type: "number" },
                                PrecioUnitarioMinimo: { type: "number", validation: { required: { message: "Ingrese Precio Unitario Mínimo" }, min: 1, max: 10000} },
                                PrecioUnitarioMaximo: { type: "number", validation: { required: { message: "Ingrese Precio Unitario Máximo" }, min: 1, max: 10000} },
                                PrecioTotalMinimo: { type: "number", editable: false },
                                PrecioTotalMaximo: { type: "number", editable: false },
                                FecCre: { type: "date", defaultValue: new Date() },
                                UsuCre: { type: "date", defaultValue: new Date() },
                                P07ClaseDesc: { type: "string" },
                                uiId: { type: "string" }
                            }
                        }
                    },
                    group: {
                        field: "P07ClaseDesc"
                        , aggregates: [
                            { field: "PrecioTotalMinimo", aggregate: "sum" },
                            { field: "PrecioTotalMaximo", aggregate: "sum" }
                        ]
                        , dir: "desc"
                    },
                    sort: { field: "Orden", dir: "asc" },
                    aggregate: [{ field: "PrecioTotalMinimo", aggregate: "sum" },
                                    { field: "PrecioTotalMaximo", aggregate: "sum"}]
                },
                toolbar: [{ name: "create", text: "Nuevo" },
                    { name: "save", text: "Guardar" },
                    { name: "cancel", text: "Cancelar   " },
                     { template: '<a class="k-button" href="\\#" onclick="return toolbar_click()">Excel</a>' }
                     , { template: '<label class="ratio-label" id="lbRatioMax"></label>' }
                     , { template: '<label class="ratio-label" id="lbRatioMin"></label>' }
                ],
                scrollable: true,
                sortable: false,
                filterable: false,
                editable: "inline",
                columns: [
                    { field: "IdComponente", title: "ID", width: "40px" },
                    { field: "Descripcion", title: "Descripción", width: "200px" },
                    { field: "P07ClaseDesc", width: "90px", hidden: true, groupHeaderTemplate: "#= value #" },
                    { field: "Cantidad", title: "Cantidad", width: "50px" },
                    { field: "PrecioUnitarioMinimo", title: "Precio Unitario Mínimo", width: "80px", format: "{0:c}" },
                    { field: "PrecioUnitarioMaximo", title: "Precio Unitario Máximo", width: "80px", format: "{0:c}" },
                    { field: "PrecioTotalMinimo", title: "Precio Total Mínimo", format: "{0:c}", aggregates: ["sum"],
                        groupFooterTemplate: "SubTotal: $#=kendo.toString(sum, '0.00')#", footerTemplate: "TOTAL: $#=kendo.toString(sum, '0.00')#", width: "80px"
                    },
                    { field: "PrecioTotalMaximo", title: "Precio Total Máximo", format: "{0:c}", aggregates: ["sum"],
                        groupFooterTemplate: "SubTotal: $#=kendo.toString(sum, '0.00')#", footerTemplate: "TOTAL: $#=kendo.toString(sum, '0.00')#", width: "80px"
                    }
                ],
                saveChanges: function (e) {
                    this.refresh();
                },
                change: function (e) {
                    //this.refresh();
                },
                dataBound: function (e) {
                    debugger;
                    var ratioMax = e.sender.dataSource.aggregates().PrecioTotalMaximo.sum;
                    var ratioMin = e.sender.dataSource.aggregates().PrecioTotalMinimo.sum;
                    var longitud = parseInt($("#txtLongituEnlace").val());
                    $("#lbRatioMax").text("[RATIO-MAX : $ " + kendo.toString(ratioMax / longitud, '0.00') + "]");
                    $("#lbRatioMin").text("[RATIO-MIN : $ " + kendo.toString(ratioMin / longitud, '0.00') + "]");
                },
                edit: onEdit
            }).data("kendoGrid");
        }
        function onEdit(e) {
            e.model.uiId = e.model.uid;
        }
        function toolbar_click() {
            debugger;
            var datos = $("#gridFibraOptica").data("kendoGrid");
            $.ajax({
                type: "POST",
                url: "Frm_FibraOptica.aspx/DatosAExcel",
                data: kendo.stringify({ datos: datos.dataSource.data() }),
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (data) {
                    if (data.d == "null")
                        return;
                    if (data.d) {
                        var datos = data.d;
                        alert("Se Generó Excel Correctamente.");
                    }
                },
                error: function (data) {
                    alert("Ocurrió un Error al Generar Excel.");
                }
            });
            return false;
        }
        function calcularAereaPostes(lista) {
            ////debugger;
            var param1, param2, param3;
            var longitud = $("#txtLongituEnlace").val();
            $.each(lista, function (index, value) {
                if (value.IdComponente > 1 && value.IdComponente < 5) {
                    value.Cantidad = Math.round(((longitud / 100) * 110) / 4) * 4;
                    param1 = value.Cantidad;
                }
                if (value.IdComponente > 10 && value.IdComponente < 14) {
                    value.Cantidad = longitud;
                }
                if (value.IdComponente == 21) {
                    value.Cantidad = Math.ceil((param1 / 4) - 1) * $("#txtNumHilos").val();
                }
                if (value.IdComponente == 26) {
                    value.Cantidad = Math.ceil(1000 * longitud / 50);
                }
                value.PrecioTotalMinimo = value.Cantidad * value.PrecioUnitarioMinimo;
                value.PrecioTotalMaximo = value.Cantidad * value.PrecioUnitarioMaximo;
                value.FecCre = new Date();
                value.FecMod = new Date();
            });
            return lista;
        }

        function calcularAereaMediaTension(lista) {
            ////debugger;
            var params = new Array(lista.length - 1);
            var numHilos = $("#txtNumHilos").val();
            var longitud = $("#txtLongituEnlace").val();
            $.each(lista, function (index, value) {
                if (value.IdComponente == 6 || value.IdComponente == 8) {
                    value.Cantidad = Math.round(((longitud / 100) * 110) / 4) * 4;
                    params[index] = value.Cantidad;
                }
                if (value.IdComponente == 15 || value.IdComponente == 16) {
                    value.Cantidad = longitud;
                    params[index] = value.Cantidad;
                }
                if (value.IdComponente == 20) {
                    value.Cantidad = Math.ceil((params[0] / 4) - 1);
                    params[index] = value.Cantidad;
                }
                if (value.IdComponente == 18) {
                    value.Cantidad = Math.ceil((params[0] / 4) - 1);
                    params[index] = value.Cantidad;
                }
                if (value.IdComponente == 22) {
                    value.Cantidad = params[2] * 2;
                    params[index] = value.Cantidad;
                }
                if (value.IdComponente == 21) {
                    value.Cantidad = Math.ceil((params[0] / 4) - 1) * numHilos;
                    params[index] = value.Cantidad;
                }
                if (value.IdComponente == 27) {
                    value.Cantidad = Math.ceil(1000 * longitud / 400);
                }
                value.PrecioTotalMinimo = value.Cantidad * value.PrecioUnitarioMinimo;
                value.PrecioTotalMaximo = value.Cantidad * value.PrecioUnitarioMaximo;
                value.FecCre = new Date();
                value.FecMod = new Date();
            });
            return lista;
        }
        function calcularCanalizada(lista) {
            //debugger;
            var params = new Array(lista.length - 1);
            var numHilos = $("#txtNumHilos").val();
            var longitud = $("#txtLongituEnlace").val();
            $.each(lista, function (index, value) {
                if (value.IdComponente == 6 ) {
                    value.Cantidad = Math.round(((longitud / 100) * 110) / 4) * 4;
                    params[index] = value.Cantidad;
                }
                if (value.IdComponente == 10 ) {
                    value.Cantidad = Math.ceil((longitud / 100) * 110);
                    params[index] = value.Cantidad;
                }
                if (value.IdComponente == 19) {
                    value.Cantidad = Math.ceil((params[0] / 4) - 1);
                    params[index] = value.Cantidad;
                }
                if (value.IdComponente == 18) {
                    value.Cantidad = params[2];
                    params[index] = value.Cantidad;
                }
                if (value.IdComponente == 22) {
                    value.Cantidad = params[2] * 2;
                    params[index] = value.Cantidad;
                }
                if (value.IdComponente == 21) {
                    value.Cantidad = params[3] * numHilos;
                    params[index] = value.Cantidad;
                }
                if (value.IdComponente == 30) {
                    value.Cantidad = Math.ceil(1000 * longitud / 190);
                    params[index] = value.Cantidad;
                }
                if (value.IdComponente == 29) {
                    value.Cantidad = params[6] * 2;
                }
                if (value.IdComponente == 107) {
                    value.Cantidad = 1000 * $("#txtPistaConcreto").val();
                }
                if (value.IdComponente == 108) {
                    value.Cantidad = 1000 * $("#txtPistaTierra").val();
                } 
                value.PrecioTotalMinimo = value.Cantidad * value.PrecioUnitarioMinimo;
                value.PrecioTotalMaximo = value.Cantidad * value.PrecioUnitarioMaximo;
                value.FecCre = new Date();
                value.FecMod = new Date();
            });
            return lista;
        }
        
        function calcularIds() {
            var idsComponentes = [];
            var nuevo;
            //postes
            if ($("#cboTipoInstalacion").val() == 88) {
                switch ($("#txtNumHilos").val()) {
                    case "12":
                        idsComponentes.push(2);
                        idsComponentes.push(13);
                        break;
                    case "48":
                        idsComponentes.push(3);
                        idsComponentes.push(12);
                        break;
                    case "96":
                        idsComponentes.push(4);
                        idsComponentes.push(11);
                        break;
                    default:
                        nuevo = true;
                        break;
                }
                if (nuevo) {
                    idsComponentes.push(0);
                    idsComponentes.push(0);
                }
                idsComponentes.push(21);
                idsComponentes.push(26);
            }
            //postes
            if ($("#cboTipoInstalacion").val() == 89) {
                switch ($("#txtNumHilos").val()) {
                    case "12":
                        idsComponentes.push(6);
                        idsComponentes.push(15);
                        break;
                    case "48":
                        idsComponentes.push(8);
                        idsComponentes.push(16);
                        break;
                    default:
                        idsComponentes.push(0);
                        break;
                }
                idsComponentes.push(20);
                idsComponentes.push(18);
                idsComponentes.push(22);
                idsComponentes.push(21);
                idsComponentes.push(27);
                if (nuevo)
                    idsComponentes.push(0);
            }
            //Canalizada
            if ($("#cboTipoInstalacion").val() == 90) {
                switch ($("#txtNumHilos").val()) {
                    case "12":
                        idsComponentes.push(6);
                        break;
                    default:
                        idsComponentes.push(0);
                        break;
                }
                //idsComponentes.push(1);
                idsComponentes.push(10);
                idsComponentes.push(19);
                idsComponentes.push(18);
                idsComponentes.push(22);
                idsComponentes.push(21);
                idsComponentes.push(30);
                idsComponentes.push(29);

                idsComponentes.push(107);
                idsComponentes.push(108);
                if (nuevo)
                    idsComponentes.push(0);
            }
            return idsComponentes;
        }

        function onDataBound(e) {
        }

        function CargarCombos() {
            $("#cboTipoInstalacion").kendoComboBox({
                //placeholder: "Seleccione...",
                dataTextField: "Nombre",
                dataValueField: "IdParametro",
                //filter: "contains",
                //minLength: 3,
                value: "88",
                dataSource: {
                    type: "json",
                    transport: {
                        read: {
                            type: "POST",
                            url: "Frm_FibraOptica.aspx/ListaTipoInstalacion",
                            contentType: "application/json; charset=utf-8",
                            dataType: "json"
                        }
                    },
                    schema: {
                        data: "d",
                        total: "d.length"
                    }
                }
            });
        }
        
</script>
</asp:Content>

